package md;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;

/**
 * La clase SistemaMD maneja los datos de la tabla Sistema de la BDD.
 *
 * @author Jose Luis Torres
 * @version 1.0
 */
public class SistemaMD {

    private int idSistema;
    private String nombreSistema;

    /**
     * Constructor vacio.
     * Settea los atributos a los valores por defecto
     */
    public SistemaMD() {
        this.idSistema = -1;
        this.nombreSistema = "";
    }

    /**
     * Inserta un nuevo sisstema a la BDD.
     *
     * @return Retorna TRUE si es que se realiza con exito el ingreso.
     */
    public boolean insertarSistema() {
        boolean retorno = false;
        if (!this.nombreSistema.equals("")) {
            String sql = "INSERT INTO \"Sistema\" " +
                    "VALUES (" + SistemaMD.genCodigoSistema() +
                    ", '" + this.nombreSistema + "')";
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Modifica los datos de un Sistema existente en la BDD.
     *
     * @return Devuelve TRUE si es que se modifica con exito el Sistema.
     */
    public boolean modificarSistema() {
        boolean retorno = false;
        if (!this.nombreSistema.equals("") && this.idSistema != -1) {
            String sql = "UPDATE \"Sistema\" " +
                    "SET \"nombreSistema\" = '" + this.nombreSistema + "' " +
                    "WHERE \"idSistema\" = " + this.idSistema;
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Elimina un Sistema existente en la BDD.
     *
     * @return Devuelve TRUE si es que se elimina con exito el Sistema.
     */
    public boolean eliminarSistema() {
        boolean retorno = false;
        if (this.idSistema != -1) {
            String sql = "DELETE FROM \"Sistema\" " +
                    "WHERE \"idSistema\" = " + this.idSistema;
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Metodo que permite obtener los sistemas de la BDD.
     *
     * @return Devuelve una lista con los sistemas disponibles de la BDD
     */
    public Map getSistemas() {
        Map<String, String> retorno = new HashMap<String, String>();
        String sql = "SELECT * FROM \"Sistema\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno.put(rset.getString("idSistema"), rset.getString("nombreSistema"));
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    /**
     * Calcula el idCuenta que corresponde en la BDD
     *
     * @return Devuelve un entero con el codigo que corresponde en la secuencia
     */
    public static int genCodigoSistema() {
        int retorno = -1;
        String sql = "SELECT MAX(\"idSistema\") + 1 " +
                "FROM \"Sistema\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno = rset.getInt(1);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    /***************************************
     * Getters & Setters
     ***************************************/
    public int getIdSistema() {
        return idSistema;
    }

    public String getNombreSistema() {
        return nombreSistema;
    }

    public void setIdSistema(int idSistema) {
        this.idSistema = idSistema;
    }

    public void setNombreSistema(String nombreSistema) {
        this.nombreSistema = nombreSistema;
    }
}
